import java.util.ArrayList;
import java.util.Arrays;

public class MyArraylist {
    public int[] array;
    public int usedsize;  //数组中数据的个数

    public MyArraylist() {              //构造函数 new对象时自动初始化数组大小
        this.array = new int[10];
    }

    // 打印顺序表
    public void display() {                                              //逐个遍历
        for (int i = 0; i < this.usedsize; i++) {
            System.out.print(this.array[i]+" ");
        }
        System.out.println(" ");
    }
    //在 pos 位置新增元素
    public void add(int pos, int data) {
        if(pos < 0 || pos > usedsize){                 //1.判断输入下标是否合法
            System.out.println("元素插入的下标不合法");
            return;
        }
        if(isFull()) {                                 //2.判断数组满了没，满了就扩容
            this.array = Arrays.copyOf(this.array,this.array.length*2);
        }
        for (int i = this.usedsize-1 ; i >= pos ; i--) {     //3.找到最后一个下标，一个一个往后移，直至i等于pos移了之后
            this.array[i+1] = this.array[i];
        }
        this.array[pos] = data;      //4.把元素放进去
        this.usedsize++;             //5.数据个数+1
    }
    // 判断数组是否满了
    public boolean isFull() {
        return this.usedsize == this.array.length;
    }
    // 获取顺序表的有效长度
    public int  size(){
        System.out.print("数组中元素个数为："+" ");
        return this.usedsize ;
    }
    //删除某位置的元素
    public void del(int tomove) {
        if(isEmpty()) {
            System.out.println("线性表为空");
            return ;
        }
        int pos = search(tomove);
        if(pos == -1) {
            System.out.println("没有你要删除的数字");
            return;
        }
        if(pos < 0 || pos >= usedsize) {
            System.out.println("输入下标有误");
            return;
        }
        for (int i = pos; i < this.usedsize-1; i++) {
             this.array[i] = this.array[i+1];
            }
        this.usedsize--;
    }
    //更新某位置的元素
    public void update(int pos,int data) {
        if(pos < 0 || pos >= usedsize){
            System.out.println("输入下标有误");
            return;
        }
        if(isEmpty()) {
            System.out.println("线性表为空");
            return ;
        }
        this.array[pos] = data;
        return;
    }
    //判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < this.usedsize; i++) {
            if (this.array[i] == toFind) {
                return true;
            }
        }
        return false;
    }
    //查找某个元素对应的位置  找不到返回-1
    public int search(int toFind) {
        int i = 0;
        for (i = 0; i < this.usedsize; i++) {
            if (this.array[i] == toFind) {
                return i;
            }
        }
        return -1;
    }
    //获取pos 位置的值
    public int getPos(int pos) {
        if(pos < 0 || pos >= this.usedsize){
            System.out.println("pos 位置不合法");
            return -1;
        }
        if(isEmpty()) {
            System.out.println("线性表为空");
            return -1;
        }
        return this.array[pos];

    }
    //判断线性表是否为空
    public boolean isEmpty() {
        return this.usedsize == 0;
    }
    //清空线性表
    public void claer() {
        this.usedsize = 0;
        System.out.println("线性表已经清空");
    }
}
